#include <stdio.h>
#include "ftpclient.h"
#include "protocol.h"

int main(int argc,char *argv[])
{
    if(argc != 3)
    {
        printf("Usage: IP port>\n");
        return -1;
    }
    //1.创建一个socket通信端口
    int sockfd = socket(AF_INET,SOCK_STREAM,0);
    if(sockfd == -1)
    {
        perror("create socket failed");
        exit(-1);
    }
    //2.连接指定的服务器程序
    //a.描述一个服务器的地址
    struct sockaddr_in saddr;
    saddr.sin_family = AF_INET;
    saddr.sin_port = htons(atoi(argv[2]));
    inet_aton(argv[1],&saddr.sin_addr);

    //b.连接服务器
    int r = connect(sockfd,(struct sockaddr *)&saddr,sizeof(saddr));
    if(r  == -1)
    {
        perror("connect failed");
        close(sockfd);
        exit(-1);
    }
    printf("connect server success!\n");
    //不断的从标准输入接受用户的请求
    char buf[256] = {0};
    fprintf(stderr,"ftp>");
    while(1)
    {
        memset(buf,0,256);
        //读取用户终端输入的命令
        fgets(buf,256,stdin);
        //解析用户输入的命令，并且按照私有协议发送给服务器
        if(strncmp(buf,"ls",2) == 0)
        {
            //用户发送出了ls请求
            cmd_ls(sockfd);
            recv_ls_resp(sockfd);
        }
        else if(strncmp(buf, "get", 3 ) == 0)
        {
            //用户发送出了get请求
            //解析出用户输入的文件名
            char filename[256] = {0};
            //把get后面多余的空格过滤掉,得到后面的文件名
            int i = 3;
            while(buf[i] == ' ')
            {
                i++;
            }
            strcpy(filename,buf + i);//注意,fgets可以获取键盘的空白字符(\n,回车...)
            filename[strlen(filename)-1] = '\0';
            // 向服务器发出获取文件的请求
            cmd_get(sockfd,filename);
            //接收服务器的所有回复
            recv_get_resp(sockfd,filename);
        }
        else if(strncmp(buf,"put",3) == 0)
        {
            // 用户发出了put请求
            //printf("user request put\n");
            char filename[256] = {0};
            // 把put后面多余的空格过滤掉,得到后面的文件名
            int i = 3;
            while(buf[i] == ' ')
            {
                i++;
            }
            strcpy(filename,buf+i);
            filename[strlen(filename)-1]='\0';
            //向服务器发出推送文件的请求
            cmd_put(sockfd,filename);
        }
        else if(strncmp(buf,"bye",3) == 0)
        {
            // 用户发出了bye请求
            //发送一个byebye的请求给服务器
            cmd_bye(sockfd);
            printf("Goodbye\n");
            break;
        }
        fprintf(stderr,"ftp>");
    }
    close(sockfd);
    return 0;
}

